package biolabs.core

/**
 * Trait for objects that are able to create (quasi) copies
 * of themselves; for example, divisible cells.
 */
trait Instantiable[+Self <: Instantiable[Self]] {

	/**
	 * Returns a new instance of type {@code T}.
	 * The created instance is not necessarily an exact copy of this
	 * instance. Strictly speaking, the created instance need not even
	 * be of the same type, but even when it is, some of its fields might
	 * be uninitialized or initialized with some default values.
	 */
	def newInstance(): Self

}